package test1.run;

import extobject.MyObject;
import extthread.ThreadA;
import extthread.ThreadB;

/**
　* @Description: TODO
　* @param ${tags}
　* @return ${return_type}
　* @throws
　* @author Merlin
　* @date 2018/6/19 10:58
　*/

/**
 * synchronized 方法与锁对象
 * 线程锁的是对象
 *
 */
public class Run {

	public static void main(String[] args) {
		MyObject object = new MyObject();
		ThreadA a = new ThreadA(object);
		a.setName("A");
		ThreadB b = new ThreadB(object);
		b.setName("B");

		a.start();
		b.start();
	}
	/**
	 * methodA方法前未加synchronize 关键字
	 * 输出结果：
	 * begin methodA threadName=A
	   begin methodA threadName=B
	   end
	   end
	 *
	 *
	 * methodA方法前加synchronize 关键字
	 * 输出结果：
	 * begin methodA threadName=B
	   end
	   begin methodA threadName=A
	   end
	 *
	 * 通过上面的实验得到结论，调用synchronize 声明的方法一定是排队运行的。需要
	 * 牢牢记住“共享”这两个字，只有共享资源的读写访问才需要同步化，如果不是共享资源，那么
	 * 根本没有同步的必要
	 */

}
